#include "cyclical_queue.h"
#include <stdio.h>


void CyclicalQueueDemo(void)
{
    CycQueue_t queue;
    CycQueueInit(&queue);

    UserInfo_t user;
    UserInfo_t temp;

    // 入队 5 个元素
    for (int i = 0; i < 5; i++) {
        user.id = i + 1;
        sprintf(user.info, "User%d", i + 1);
        if (CycQueueIn(&queue, &user) == CYC_QUEUE_SUCCESS) {
            printf("入队成功: ID=%d, Name=%s\n", user.id, user.info);
        } else {
            printf("入队失败: 队列已满\n");
        }
    }

    // 查看队头元素
    if (CycQueueGetFront(&queue, &temp) == CYC_QUEUE_SUCCESS) {
        printf("当前队头: ID=%d, Name=%s\n", temp.id, temp.info);
    }

    // 出队两个元素
    for (int i = 0; i < 2; i++) {
        if (CycQueueOut(&queue, &temp) == CYC_QUEUE_SUCCESS) {
            printf("出队成功: ID=%d, Name=%s\n", temp.id, temp.info);
        } else {
            printf("出队失败: 队列为空\n");
        }
    }

    // 继续入队 2 个元素，验证循环特性
    for (int i = 5; i < 7; i++) {
        user.id = i + 1;
        sprintf(user.info, "User%d", i + 1);
        if (CycQueueIn(&queue, &user) == CYC_QUEUE_SUCCESS) {
            printf("入队成功: ID=%d, Name=%s\n", user.id, user.info);
        } else {
            printf("入队失败: 队列已满\n");
        }
    }

    // 最后出队直到队空
    while (!CycQueueIsEmpty(&queue)) {
        if (CycQueueOut(&queue, &temp) == CYC_QUEUE_SUCCESS) {
            printf("出队成功: ID=%d, Name=%s\n", temp.id, temp.info);
        }
    }
}

